1、0-n-1中是有序的，但是缺少了一个数，求缺少的那个数
思想一：利用位运算，直接创建一个数组里面有0-n-1的所有数，按照下标将2个数~，剩下的哪一个就是缺少的数。
思想二：因为看见有序信息，所以想到了二分查找：如果mid的左边缺少，那么mid一点不和数组中的中间相等，如果相等，说明右边缺少。
此种思想需要注意当【0】和【1】的情况，
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        if(nums.size()==0)
        {
            return -1;
        }
        
        int left=0;
        int right=nums.size()-1;
        int mid=0;
       
        while(left<right)
        {
            mid=(left+right)/2;
            if(mid!=nums[mid])
            {
                right=mid;
            }
            else
            {
                left=mid+1;
            }
        }
        
        return left==nums[left]?left+1:left;
        
    }
};

2、一串字符，求第一次只出现一次的字符
思想L:可以利用unordered_map统计每个字符出现的次数，在查找出现一次的字符
class Solution {
public:
    char firstUniqChar(string s) {
        unordered_map<char,int> m;
        for(auto e:s)
        {
            m[e]++;
        }
        for(int i=0;i<s.size();++i)
        {
            if(m[s[i]]==1)
            {
                return s[i];
            }
        }
        return ' ';
    }
};

3、1+2+...n   但是不能使用加减乘除，循环，判断等
利用等差数列求和  可以知(n)*(n+1)/2即为结果，再由n*(n+1)可以看出  这和二维数组的个数一样，由此想到利用求二维数组内存法得到，再利用左移表示乘，右移表示除  来求得
class Solution {
public:
    int sumNums(int n) {
        int a[n][n+1];
        return sizeof(a)>>3;
    }
};